#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int p[N];//记录每个元素的父亲节点节点，如果两个数属于一个集合那么他们的根节点一样
int size_arr[N];//用来维护根节点的集合里面的点的个数
int n,m;
string t1;
int a,b;

int find(int num)
{
    //该函数用来找到一个数的根节点
    if(p[num]!=num)
    {
        //这样递归调用会导致每个数的p[x]直接指向我们的根节点
        p[num]=find(p[num]);
    }
    return p[num];
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++) {p[i]=i;size_arr[i]=1;}//每个数字初始化为一个集合
    while(m--)
    {
        cin>>t1;
        if(t1=="C")
        {   
            
            cin>>a>>b;
            //合并那个集合就是找到他们的根节点进行连接
            if(find(a)!=find(b))
            {
                //进行连接
                size_arr[find(b)]+=size_arr[find(a)];
                p[find(a)]=find(b);
            }
            
        }
        else if(t1=="Q1")
        {
            cin>>a>>b;
            if(find(a)==find(b)) 
            cout<<"Yes"<<endl;
            else 
            {
                 cout<<"No"<<endl;
            }
        }
        else
        {
            cin>>a;
            cout<<size_arr[find(a)]<<endl;
        }

    }
    return 0;
}